/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import io.MotoDTO;
import java.sql.*;

/**
 * Esta clase representa al gestor de la tabla moto que se encuentra
 * almacenada en la base de datos.
 * @author nahuel
 */
public class MySQLMotoDAO {

    /**
     * Este mensaje permite insertar una nueva moto en la base de datos
     * @param moto
     * @throws DAOException 
     */
    public void agregarMoto(MotoDTO moto) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            stat.executeUpdate("insert into moto (idVenta,marca,modelo,cilindrada,color,km,numMotor,numChasis,modeloAño) values (" + moto.getIdVenta() + ",'" + moto.getMarca() + "','" + moto.getModelo() + "','" + moto.getCilindrada() + "','" + moto.getColor() + "','" + moto.getKm() + "','" + moto.getNumMotor() + "','" + moto.getNumChasis() + "','" + moto.getModeloAnio() + "')");
        } catch (SQLException e) {
            throw new DAOException("Error al insertar la moto en la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }

    /**
     * Este método permite obtener una moto de una venta determinada por el id
     * @param id
     * @return
     * @throws DAOException 
     */
    public MotoDTO getMotoByVentaId(int id) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            ResultSet rs = stat.executeQuery("select * from moto where idVenta = " + id + " LIMIT 1");
            MotoDTO moto = null;
            if (rs != null) {
                while (rs.next()) {
                    moto = new MotoDTO(rs.getInt("id"), rs.getInt("idVenta"), rs.getString("marca"), rs.getString("modelo"), rs.getString("cilindrada"), rs.getString("color"), rs.getString("km"), rs.getString("numMotor"), rs.getString("numChasis"), rs.getString("modeloAño"));
                }
            }
            rs.close();
            return moto;
        } catch (SQLException e) {
            throw new DAOException("Error al leer la moto desde la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }

    /**
     * Este método permite actualizar los datos de una moto en la base de datos
     * @param moto datos a actualizar
     * @throws DAOException 
     */
    public void actualizarMoto(MotoDTO moto) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            stat.executeUpdate("update moto set marca = '" + moto.getMarca() + "',modelo = '" + moto.getModelo() + "',cilindrada = '" + moto.getCilindrada() + "',color = '" + moto.getColor() + "',km = '" + moto.getKm() + "',numMotor = '" + moto.getNumMotor() + "',numChasis = '" + moto.getNumChasis() + "',modeloAño = '" + moto.getModelo() + "' where id = " + moto.getId());
        } catch (SQLException e) {
            throw new DAOException("Error al actualizar la moto en la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
    
    /**
     * Este método permite borrar una moto
     * @param id
     * @return true si fue exitoso y false si la moto no existe
     * @throws DAOException 
     */
    public boolean eliminarMoto(int id) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            if (stat.executeUpdate("delete from moto where id = '" + id + "'") == 0) {
                return false;
            } else {
                return true;
            }
        } catch (SQLException e) {
            throw new DAOException("Error al borrar moto de la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
}
